package offer2;

public class StringPool {
    public static void main(String[] args) {
        String a = "a" + "b";
        System.out.println(a);
        System.out.println(a.intern());
        System.out.println(a == a.intern());

        String b = new String("ja" + "va");
        System.out.println(b);
        System.out.println(b.intern());
        System.out.println(b == b.intern());

        /*
        上面的例子，一个返回true，一个返回false

        System类初始化的时候会声明一个java字符串常量
        private static final String launcher_name = "java";
        采用new创建的字符串对象不进入字符串池
         */

        /*
        intern方法：返回一个字符串，内容与此字符串相同，但一定取自具有唯一字符串的池。

        尽管在输出中调用intern方法并没有什么效果，但是实际上后台这个方法会做一系列的动作和操作。
        在调用”ab”.intern()方法的时候会返回”ab”，但是这个方法会首先检查字符串池中是否有”ab”这个字符串，
        如果存在则返回这个字符串的引用，否则就将这个字符串添加到字符串池中，然会返回这个字符串的引用。

        推荐阅读：深入理解Java虚拟机——JVM高级特性与最佳实践
         */
    }
}
